/**
 * 
 */
package rs.fon.rapidminer.process;

import java.io.Serializable;
import java.util.List;

/**
 * Step interface defines methods that describe steps in process.
 * 
 * @author Nikola Nikolic
 * 
 */
public interface Step extends Serializable {

	/**
	 * Gets name of step;
	 * 
	 * @return String name of step;
	 */
	public abstract String getName();

	/**
	 * Sets name of step;
	 * 
	 * @param name
	 *            name for step
	 */
	public abstract void setName(String name);

	/**
	 * Determine does this step has many or just one implementation class to
	 * choose. For some steps require more then one implementation classes to do
	 * the job like Stopping Criteria can have many stopping criteria not just
	 * one.
	 * 
	 */
	public abstract boolean isMultiple();

	public abstract void setMultiple(boolean multiple);

	/**
	 * Gets implementation classes names to be shown on gui in order to be
	 * chosen
	 * 
	 * @return array of names of implementation classes;
	 */
	public String[] getAvailableImplementationClassNames();

	/**
	 * Sets step data.
	 * 
	 * 
	 */
	public void setStepData(StepData stepData);

	/**
	 * Gets step data.
	 * 
	 */
	public StepData getStepData();

	/**
	 * Sets
	 * 
	 *@param listOfStepData
	 *            {@link StepData}
	 * 
	 */
	public void setMultipleStepData(List<StepData> listOfStepData);

	/**
	 * Sets
	 * 
	 *@return {@link StepData}
	 */
	public List<StepData> getMultipleStepData();

	/**
	 * 
	 * gets Step description
	 */
	public String getDescription();

	/**
	 * sets Step description
	 */
	public void setDescription(String decription);

}
